package snow

import (
	"time"
	"fmt"
)

var (
	//设备号
	mchId int64
	//上次获取到的时间戳 毫秒
	lastTime int64
	//序列号
	sn int64

)

//初始化
func Initial() {
	mchId = 0
}

func GetId() string {
	currentTime := time.Now().UnixNano() / 1000000
	//如果同时获取
	if currentTime == lastTime {
		sn++
		sn = sn % 4096
	} else {
		sn = 0
	}
	lastTime = currentTime

	//生成
	res := (currentTime << 22) | (mchId << 12) | sn

	return fmt.Sprintf("%d",res)
}
